// 和复选框对应的是单选框，又被称为单选按钮，由复选框派生而来，区别在于任何时候同一组按钮
// 只能选择其中 一个按钮，当单机选择其中一个按钮的时候会自动释放其他按钮而选中当前按钮
/* 通常单选框都是以组的形式存在的，所以建立单选框的操作应该包括以下三个步骤：
 * 1：建立一个新的单选框
 * 2：将该单选框加入到一个组中
 * 3：继续建立新的单选框并加入组中，知道所有需要的单选框都被添加
 *
 * 每次添加单选框之后都应该调用gtk_radio_button_group以获得当前组的信息，然后再次添加单选框
 * 需要注意的是在第一次使用该组之前应该将该组指向NULL，否则会出现错误
 * */
/* 该案例是在一个窗口中建立了多个单选框的实例。由于在一个容器中只能添加一个构件，所以在其中使用了box这个概念*/
#include <gtk/gtk.h>

void button_deal(GtkWidget *button, gpointer data){

	g_print("Button Event:%s\n",data);
}

int main(int argc, char *argv[]){
	
	//窗口和按钮对应的指针
	GtkWidget *window,*radio_button;
	// box组装盒的指针
	GtkWidget *box;

	// 该group是用来存放单选框的组
	GSList *group = NULL;

	char title[] = "radio_buttion_test";

	// 初始化窗体函数
	gtk_init(&argc,&argv);
	
	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(window),title);

	gtk_widget_set_usize(window,500,500);
	gtk_widget_set_uposition(window,500,400);

	gtk_signal_connect(GTK_OBJECT(window),"delete_event", G_CALLBACK(gtk_main_quit),NULL);
	
	// 创建box容器
	box = gtk_vbox_new(FALSE,0);

	// 创建单选框
	radio_button = gtk_radio_button_new_with_label(group,"Radio Button 1");
	// 创建完单选框之后需要将其放入的组中
	group = gtk_radio_button_group(radio_button);
	// 因为一个容器中只能添加一个构件，所以需要将其放入box中
	gtk_box_pack_start(GTK_BOX(box),radio_button,FALSE,FALSE,0);
	gtk_widget_show(radio_button);

	// 添加时间触发回调函数
	gtk_signal_connect(GTK_OBJECT(radio_button),"pressed",G_CALLBACK(button_deal),"pressed Radio_Button_1");
	gtk_signal_connect(GTK_OBJECT(radio_button),"clicked",G_CALLBACK(button_deal), "clicked Radio_Button_1");
	gtk_signal_connect(GTK_OBJECT(radio_button),"relased",G_CALLBACK(button_deal),"released Radio_Button_1");

	// 创建单选框
	radio_button = gtk_radio_button_new_with_label(group,"Radio Button 2");
	// 创建完单选框之后需要将其放入的组中
	group = gtk_radio_button_group(radio_button);
	// 因为一个容器中只能添加一个构件，所以需要将其放入box中
	gtk_box_pack_start(GTK_BOX(box),radio_button,FALSE,FALSE,0);
	gtk_widget_show(radio_button);
	// 添加时间触发回调函数
	gtk_signal_connect(GTK_OBJECT(radio_button),"pressed",G_CALLBACK(button_deal),"pressed Radio_Button_2");
	gtk_signal_connect(GTK_OBJECT(radio_button),"clicked",G_CALLBACK(button_deal), "clicked Radio_Button_2");
	gtk_signal_connect(GTK_OBJECT(radio_button),"relased",G_CALLBACK(button_deal),"released Radio_Button_2");

	// 创建单选框
	radio_button = gtk_radio_button_new_with_label(group,"Radio Button 3");
	// 创建完单选框之后需要将其放入的组中
	group = gtk_radio_button_group(radio_button);
	// 因为一个容器中只能添加一个构件，所以需要将其放入box中
	gtk_box_pack_start(GTK_BOX(box),radio_button,FALSE,FALSE,0);
	gtk_widget_show(radio_button);
	// 添加时间触发回调函数
	gtk_signal_connect(GTK_OBJECT(radio_button),"pressed",G_CALLBACK(button_deal),"pressed Radio_Button_3");
	gtk_signal_connect(GTK_OBJECT(radio_button),"clicked",G_CALLBACK(button_deal), "clicked Radio_Button_3");
	gtk_signal_connect(GTK_OBJECT(radio_button),"relased",G_CALLBACK(button_deal),"released Radio_Button_3");

	// 将box放入到窗体中
	gtk_container_add(GTK_CONTAINER(window),box);
	gtk_widget_show(box);
	gtk_widget_show(window);
	gtk_main();
	return 0;

}
